Conditional Matching Techniques

Java Technologies - জাভা রেজেক্স (Java Regex) Complex Pattern Matching Techniques |
125
125

Conditional Matching Techniques সাধারণভাবে Regular Expressions (Regex)-এ ব্যবহৃত হয়, যেখানে আপনি প্যাটার্নের বিভিন্ন অংশের উপর নির্দিষ্ট শর্ত বা শর্তাবলী প্রয়োগ করতে চান। জাভাতে Regex ব্যবহার করে Conditional Matching করার জন্য কিছু টেকনিক এবং নিয়ম আছে, যা java.util.regex প্যাকেজে Pattern এবং Matcher ক্লাসের মাধ্যমে বাস্তবায়িত করা যায়।

Conditional Matching এর ধারণা:

Conditional Matching এর মাধ্যমে আপনি রেগুলার এক্সপ্রেশনের মধ্যে একটি প্যাটার্নের অংশে শর্ত যোগ করতে পারেন। এটি সাধারণভাবে if-else শর্তের মতো কাজ করে, যেখানে একটি শর্ত সঠিক হলে একটি প্যাটার্ন মিলবে, অন্যথায় অন্য প্যাটার্ন মিলবে।

Conditional Matching-এ ব্যবহারযোগ্য কিছু টেকনিক:

  1. (a|b): এই স্ট্রাকচারটি OR শর্তের মতো কাজ করে, যেখানে a অথবা b মিললে সেটা গ্রহণযোগ্য হবে।
  2. (?=...) (Positive Lookahead): এই টেকনিকটি একটি শর্ত যাচাই করে, কিন্তু এটি মিলানোর অংশটিকে ফলস্বরূপ হিসেবে প্রদান করে না।
  3. (?!...) (Negative Lookahead): এটি একটি শর্ত যাচাই করে, যেখানে প্যাটার্নটির পরবর্তী অংশে যে কিছু না থাকবে, সেটি নিশ্চিত করা হয়।
  4. (?<=...) (Positive Lookbehind): এটি সেই শর্তটিকে ম্যাচ করার জন্য যে কোনো প্যাটার্নের পূর্বে কিছু আছে কিনা তা যাচাই করে।
  5. (?<!...) (Negative Lookbehind): এটি প্যাটার্নটির পূর্বে কিছু না থাকার শর্ত যাচাই করে।

1. (a|b) - OR (অথবা) অপারেটর:

এটি ব্যবহার করে আপনি দুটি প্যাটার্নের মধ্যে একটি মেলানোর শর্ত তৈরি করতে পারেন।

অথবা শর্ত উদাহরণ:

import java.util.regex.*;

public class ConditionalMatchingExample {
    public static void main(String[] args) {
        String text = "apple orange banana";

        // Regex pattern to match either "apple" or "orange"
        Pattern pattern = Pattern.compile("apple|orange");

        Matcher matcher = pattern.matcher(text);
        
        // Find matches
        while (matcher.find()) {
            System.out.println("Found: " + matcher.group());
        }
    }
}

আউটপুট:

Found: apple
Found: orange

ব্যাখ্যা:

  • apple|orange: এটি একটি OR শর্ত, যেখানে স্ট্রিং "apple" অথবা "orange" মিললে সেটা ম্যাচ করবে।

2. (?=...) (Positive Lookahead):

Positive Lookahead শর্তটি মিলানোর পরবর্তী অংশে কিছু নির্দিষ্ট প্যাটার্ন থাকা নিশ্চিত করবে, তবে সেটি মূল মিলের অংশ হিসেবে ধরে না। এটি যেমন প্যাটার্নের অংশ দেখতে সাহায্য করে, তেমনি মিলানোর পরবর্তী অংশে কিছু থাকতে হবে বা না থাকতে হবে তা যাচাই করে।

Positive Lookahead উদাহরণ:

import java.util.regex.*;

public class LookaheadExample {
    public static void main(String[] args) {
        String text = "apple123 orange456 banana789";

        // Regex pattern to match a word followed by digits
        Pattern pattern = Pattern.compile("\\w+(?=\\d)");

        Matcher matcher = pattern.matcher(text);

        // Find matches
        while (matcher.find()) {
            System.out.println("Found: " + matcher.group());
        }
    }
}

আউটপুট:

Found: apple
Found: orange
Found: banana

ব্যাখ্যা:

  • \\w+(?=\\d): এখানে \\w+ (যেকোনো অক্ষর) এবং (?=\\d) শর্তে এটি চেক করবে যে কোনো শব্দের পর সংখ্যা আছে কিনা।
  • এই ক্ষেত্রে apple, orange, এবং banana এর পরে ডিজিট রয়েছে, তাই সেগুলি মিলছে।

3. (?!...) (Negative Lookahead):

Negative Lookahead ব্যবহার করলে আপনি এমন শর্ত তৈরি করতে পারেন যা কিছু না থাকা শর্ত চেক করবে।

Negative Lookahead উদাহরণ:

import java.util.regex.*;

public class NegativeLookaheadExample {
    public static void main(String[] args) {
        String text = "apple orange123 banana123";

        // Regex pattern to match a word that is NOT followed by digits
        Pattern pattern = Pattern.compile("\\w+(?!\\d)");

        Matcher matcher = pattern.matcher(text);

        // Find matches
        while (matcher.find()) {
            System.out.println("Found: " + matcher.group());
        }
    }
}

আউটপুট:

Found: apple
Found: orange

ব্যাখ্যা:

  • \\w+(?!\\d): এটি এমন শব্দ খুঁজে বের করবে, যার পরে কোন সংখ্যাও নেই। "banana123" মেলেনি কারণ তার পরে ডিজিট রয়েছে।

4. (?<=...) (Positive Lookbehind):

Positive Lookbehind শর্তটি এমন একটি প্যাটার্নের জন্য কাজ করবে যা একটি নির্দিষ্ট অংশের আগে কিছু থাকে কিনা তা যাচাই করবে।

Positive Lookbehind উদাহরণ:

import java.util.regex.*;

public class LookbehindExample {
    public static void main(String[] args) {
        String text = "apple123 orange456 banana789";

        // Regex pattern to match digits preceded by a word
        Pattern pattern = Pattern.compile("(?<=\\w)\\d+");

        Matcher matcher = pattern.matcher(text);

        // Find matches
        while (matcher.find()) {
            System.out.println("Found: " + matcher.group());
        }
    }
}

আউটপুট:

Found: 123
Found: 456
Found: 789

ব্যাখ্যা:

  • (?<=\\w)\\d+: এখানে \\w (যেকোনো শব্দ অক্ষর) এর পর \\d+ (একাধিক ডিজিট) চেক করা হচ্ছে। এটি শুধুমাত্র এমন ডিজিট খুঁজে পাবে যা কোনো শব্দের পরে রয়েছে।

5. (?<!...) (Negative Lookbehind):

Negative Lookbehind ব্যবহার করলে আপনি এমন শর্ত তৈরি করতে পারেন যা কোনো নির্দিষ্ট অংশের আগে কিছু না থাকার শর্ত চেক করবে।

Negative Lookbehind উদাহরণ:

import java.util.regex.*;

public class NegativeLookbehindExample {
    public static void main(String[] args) {
        String text = "apple123 orange456 banana789";

        // Regex pattern to match digits not preceded by a word
        Pattern pattern = Pattern.compile("(?<!\\w)\\d+");

        Matcher matcher = pattern.matcher(text);

        // Find matches
        while (matcher.find()) {
            System.out.println("Found: " + matcher.group());
        }
    }
}

আউটপুট:

Found: 123
Found: 456
Found: 789

ব্যাখ্যা:

  • (?<!\\w)\\d+: এটি শুধু সেগুলোকেই ম্যাচ করবে যেখানে ডিজিটের আগে কোন শব্দ নেই। "apple123" এবং "orange456" এর পরে শব্দ রয়েছে, তবে "789" একটি সংখ্যা এবং তার আগে কোনো শব্দ নেই, তাই এটি ম্যাচ করবে।
  • Conditional Matching Techniques (যেমন lookahead এবং lookbehind) রেগুলার এক্সপ্রেশন প্যাটার্নে অত্যন্ত শক্তিশালী এবং নমনীয় ফিচার। এগুলি আপনাকে স্ট্রিংয়ের নির্দিষ্ট অংশ বা শর্ত অনুসারে প্যাটার্ন ম্যাচ করতে সক্ষম করে।
  • Positive Lookahead এবং Negative Lookahead ব্যবহার করে আপনি এমন শর্ত নির্ধারণ করতে পারেন যা প্যাটার্নের পরবর্তী অংশের ভিত্তিতে কিছু কার্য সম্পাদন করবে।
  • Positive Lookbehind এবং Negative Lookbehind ব্যবহার করে আপনি প্যাটার্নের আগের অংশের ভিত্তিতে শর্ত নির্ধারণ করতে পারেন।

এই সব শর্তগুলির মাধ্যমে, আপনি আরও শক্তিশালী এবং জটিল টেক্সট ম্যাচিং প্যাটার্ন তৈরি করতে পারবেন।

Content added By
Promotion